/**
 * tagsView标签切换页面
 *
 */

// visitedRoutes本地缓存（localStorage）
const getCacheVisitedRoutes = () => {   // 获取本地缓存
  let visitedRoutes = localStorage.getItem("visitedRoutes");  // 获取本地缓存
  return visitedRoutes ? JSON.parse(visitedRoutes) : [];  // 如果本地缓存存在，则解析为对象，否则返回空数组
};
const setCacheVisitedRoutes = visitedRoutes => {   // 设置本地缓存
  localStorage.setItem("visitedRoutes", JSON.stringify(visitedRoutes));  // 将对象转换为字符串并存储到本地缓存中
};




export default {   // 导出模块,default为默认导出,可以不写
  namespaced: true,  // 命名空间
  state: () => ({
    visitedRoutes: getCacheVisitedRoutes(),
  }),
  mutations: {   // 同步方法，用于更新状态
    //添加
    ADD_VISITED_ROUTE(state, route) {   // 添加访问过的路由，如果已经存在则更新
      let target = state.visitedRoutes.find(item => item.path === route.path);  // 查找是否已经存在
      if (target) {   //if(target)表示如果存在，则更新
        if (route.fullPath !== target.fullPath) Object.assign(target, route);  // 如果fullPath不同，则更新
        return;
      }
      state.visitedRoutes.push({ ...target, ...route });  // 如果不存在，则添加
      setCacheVisitedRoutes(state.visitedRoutes);  // 设置本地缓存
    },
    //删除
    DELETE_VISITED_ROUTE(state, route) {   // 删除访问过的路由
      state.visitedRoutes.forEach((item, index) => {
        if (item.path === route.path) state.visitedRoutes.splice(index, 1);  // 如果路径相同，则删除
      });
      setCacheVisitedRoutes(state.visitedRoutes);
    },
    //删除除了本身以外的
    DELETE_OTHERS_VISITED_ROUTE(state, route) {   // 删除除了本身以外的访问过的路由
      state.visitedRoutes = state.visitedRoutes.filter(
        item => item.path == route.path  // 过滤，只保留路径相同的
      );
      setCacheVisitedRoutes(state.visitedRoutes);  // 设置本地缓存
      console.log("state", state);
    },
    //更新当前
    UPDATE_VISITED_ROUTE(state, route) {  // 更新当前访问过的路由
      state.visitedRoutes.forEach(item => {  // 遍历访问过的路由
        if (item.path === route.path) {  // 如果路径相同
          console.log("refresh", item);
          item = Object.assign(item, route);  // 更新路由信息
        }
      });
    },
  },
};
